const { app, BrowserWindow, globalShortcut, ipcMain } = require("electron");
const UtilsClass = require("./utils/index");
const { getStaticPath, getAppPath } = require("./utils/hotkeyfunc");
const { setupLogging } = require("./utils/tools");
const Updater = require("./updater");
const url = require("url");

const appName = "项目管理系统";
app.setName(appName);
app.setAppUserModelId(appName); // Windows 必须设置
// 禁用不需要的功能，优化性能
app.commandLine.appendSwitch("disable-3d-apis");
app.commandLine.appendSwitch("disable-gpu");
// 打包时修改
process.env.NODE_ENV = "production";
let mainWindow;
let isDevelopment = process.env.NODE_ENV !== "production";
let Utils;
let updater;

// 开发环境屏蔽所有安全警告
if (isDevelopment) {
  process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";
} else {
  // 设置日志文件输出
  setupLogging("app");
}
ipcMain.handle("get-webview-preload-path", () => {
  const absPath = getAppPath(isDevelopment, "webview-preload.js");
  return url.pathToFileURL(absPath).href;
});
function createWindow() {
  mainWindow = new BrowserWindow({
    resizable: true,
    icon: getStaticPath(isDevelopment, "image/favicon.ico"), //	左上角图标
    width: 1920,
    height: 1080,
    webPreferences: {
      nodeIntegration: false, // 禁用 Node.js 访问
      contextIsolation: true, // 启用上下文隔离
      sandbox: true, // 启用沙盒模式
      preload: getAppPath(isDevelopment, "preload.js"),
      webgl: false,
      webviewTag: true, // 启用 webview 标签
      allowRunningInsecureContent: true, // 允许运行不安全内容
      webSecurity: false,
    },
  });
  //	隐藏顶部菜单栏
  mainWindow.setMenu(null);
  // 主进程
  mainWindow.webContents.setWindowOpenHandler(() => {
    return { action: "deny" }; // 阻止所有新窗口
  });
  mainWindow.loadFile(getAppPath(isDevelopment, "pm-electron/dist/index.html"));
  Utils = new UtilsClass(mainWindow, isDevelopment);
  // 设置 webview 权限
  mainWindow.webContents.on("new-window", (event, navigationUrl) => {
    event.preventDefault();
  });

  // 允许 webview 加载本地资源
  mainWindow.webContents.session.setPermissionRequestHandler(
    (webContents, permission, callback) => {
      callback(true);
    }
  );
  // 初始化自动更新
  if (!isDevelopment) {
    try {
      updater = new Updater(mainWindow);
      // 启动时检查更新
      updater.checkForUpdatesOnStartup();
    } catch (error) {
      console.error("初始化自动更新失败:", error);
      // 不阻止应用启动，继续运行
    }
  }

  // 确保开机自启动已设置（仅在生产环境）
  if (!isDevelopment) {
    try {
      const AutoStartManager = require("./utils/autostart");
      const autoStartManager = new AutoStartManager();
      if (!autoStartManager.isAutoStartEnabled()) {
        autoStartManager.enableAutoStart();
        console.log("已设置开机自启动");
      }
    } catch (error) {
      console.error("设置开机自启动失败:", error);
    }
  }

  mainWindow.on('close', (e) => {
    if (!Utils.isQuiting) {
      e.preventDefault();
      // 直接最小化到托盘，不弹出确认框
      Utils.setMinimizeWindowToTray();
    }
  });
}
// 单实例锁，仅允许打开一个实例
const gotTheLock = app.requestSingleInstanceLock();
// 如果已经有实例在运行，直接退出
if (!gotTheLock) {
  app.quit();
} else {
  app.whenReady().then(() => {
    createWindow();
    // 注册消息监听
    Utils.registerIpcMainAfterAppReady();
    // 注册全局快捷键
    Utils.registerShortcuts();
    // 窗口聚焦时注册局部快捷键
    mainWindow.on("focus", () => {
      Utils.registerLocalShortcutKeys();
    });
    // 窗口失焦时注销局部快捷键
    mainWindow.on("blur", () => {
      Utils.unRegisterLocalShortcutKeys();
    });
  });
  // 打开两次
  app.on("second-instance", () => {
    if (mainWindow) {
      if (!mainWindow.isVisible()) {
        mainWindow.show();
      } else if (mainWindow.isMinimized()) {
        mainWindow.restore();
      }
      mainWindow.focus();
    }
  });
  app.on("window-all-closed", function () {
    if (process.platform !== "darwin") {
      globalShortcut.unregisterAll();
      app.quit();
    }
  });
}
